const path = require('path');
const CompressionPlugin = require("compression-webpack-plugin");
const webpack = require('webpack')
function resolve(dir) {
  return path.join(__dirname, dir);
}
const project = require('./config/projectConfig.ts')
const env = require('./env/env.'+ process.env.NODE_ENV + '.ts')
module.exports = {
  /**
   * publicPath 默认为/，可以改为相对路径,默认情况下，Vue CLI 会假设你的应用是被部署在一个域名的根路径上
   * 例如 https://www.my-app.com/。如果应用被部署在一个子路径上，你就需要用这个选项指定这个子路径。
   * 例如，如果你的应用被部署在 https://www.my-app.com/my-app/，则设置 publicPath 为 /my-app/。
   */
  publicPath: process.env.NODE_ENV === 'development' ? '/' : '/'+ project.prefix + '/',
  outputDir: resolve('dist/'+ project.prefix), //默认值为dist，构建输出目录，若打包时不改会覆盖之前版本
  //chainWebpack，Vue CLI 内部的 webpack 配置是通过 webpack-chain 维护的。这个库提供了一个 webpack 原始配置的上层抽象，使其可以定义具名的 loader 规则和具名插件，并有机会在后期进入这些规则并对它们的选项进行修改。
  chainWebpack: config => {
    config.resolve.alias.set('@', resolve('src'))
    // 重新定义全局环境变量
    config.plugin('define')
    .tap(args => {
      args[0]['process.env'] = env;
      console.log(args[0]['process.env']);
      return args
    })    
    // 修改 entry 配置
    config.entry('app').clear()
    .add(resolve(project.path + '/src/main.ts'))
    .end()
    config.plugin('html')
    .tap(args => {
      args[0].title = project.describtion;
      args[0].template = resolve(project.path+'/public/index.html');
      return args;
    })
    if(config.mode == 'production') {
      config.plugin('compressionPlugin').use(new CompressionPlugin({
        /* [file]被替换为原始资产文件名。
           [path]替换为原始资产的路径。
           [dir]替换为原始资产的目录。
           [name]被替换为原始资产的文件名。
           [ext]替换为原始资产的扩展名。
           [query]被查询替换。*/
        filename: '[path].gz[query]',
        //压缩算法
        algorithm: 'gzip',
        //匹配文件
        test: /\.js$|\.css$|\.html$/,
        //压缩超过此大小的文件,以字节为单位
        threshold: 10240,
        minRatio: 0.8,
        //删除原始文件只保留压缩后的文件
        deleteOriginalAssets: true
      }))
    }
  },
  configureWebpack: config => {
    config.output.globalObject = 'this'
  },
  devServer: {
    host: '127.0.0.1', //指定要使用的 host。如果你希望服务器可从外部访问
    hot: true, // 启用热更新
    open: true, // 启动项目自动打开浏览器
    port: project.port, // 指定端口号
    // proxy: {
    //   //配置跨域,可参见官方文档https://webpack.js.org/configuration/dev-server/#devserverproxy
    //   '/api': {
    //     target: 'http://localhost:7000/api/',//跨域地址
    //     ws: true,//如果要代理WebSockets,设置为true
    //     changOrigin: true,// 是否允许跨域
    //     pathRewrite: {//如果不希望传递/api，则需要重写路径：
    //       '^/api': ''
    //     }
    //   }
    // },
  },
}